package com.javarush.test.level18.lesson10.home10;

/* Собираем файл
Собираем файл из кусочков
Считывать с консоли имена файлов
Каждый файл имеет имя: [someName].partN. Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37.
Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end"
В папке, где находятся все прочтенные файлы, создать файл без приставки [.partN]. Например, Lion.avi
В него переписать все байты из файлов-частей используя буфер.
Файлы переписывать в строгой последовательности, сначала первую часть, потом вторую, ..., в конце - последнюю.
Закрыть все потоки ввода-вывода
Темповые файлы создавать нельзя, т.к. на сервере заблокирована возможность создания каких любо файлов
*/

import java.io.*;
import java.util.Map;
import java.util.TreeMap;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        String file="";
        String path="";
        TreeMap<Integer,String> files=new TreeMap<Integer,String>();
        while(!(file=reader.readLine()).equals("end")) {
            int index = file.indexOf(".part");
            String is = file.substring(index+5, file.length());
            files.put(Integer.parseInt(is), file);
            Integer firstKey = files.firstKey();
            path = files.get(firstKey).substring(0, files.get(firstKey).indexOf(".part"));



            /*String[] arr = str.split("\\.");
            if (path.equals(""))
            {
                for (int i=0; i<arr.length-1; i++)
                {
                    if (i == arr.length - 1)
                    {
                        path += arr[i];
                        continue;
                    }
                    path += arr[i]+".";
                }
            }
            String partNumber = arr[arr.length - 1];
            Pattern pat = Pattern.compile("[0-9]");
            Matcher matcher = pat.matcher(partNumber);
            String s = "";
            while (matcher.find()) {
                s = s + (matcher.group());
            }
            try {
                files.put(Integer.parseInt(s), str);

            }
            catch (NumberFormatException e)
            {
                continue;
            }*/

        }
        reader.close();
        BufferedOutputStream outFile=new BufferedOutputStream(new FileOutputStream(path));
        for (Map.Entry<Integer, String> map:files.entrySet())
        {

            BufferedInputStream stream=new BufferedInputStream(new FileInputStream(map.getValue()));
            int data;
            while ((data = stream.read()) !=-1){
                outFile.write(data);
            }
            stream.close();
        }
        outFile.close();

    }
}
